﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DataTier.Entities;

namespace Otgruzka.Helpers
{
    public static class ObjectToHtmlHelper
    {
        public static string GetOrderHTML(OrderEntity order, bool toMegaOffice = false)
        {
            int colCount = (toMegaOffice) ? 7 : 5;

            string ret = "";
            ret += "<style>";
            ret += "#tablespec table { background-color: black; }";
            ret += "#tablespec th { background-color: white; }";
            ret += "#tablespec td { background-color: white; }";
            ret += "</style>";
            ret += "<table border=\"0\" cellpadding=\"4\">";
            ret += string.Format("<tr><td nowrap>Номер заказа:</td><td width=\"100%\">{0}</td></tr>", order.Header.Number);
            ret += string.Format("<tr><td nowrap>E-mail:</td><td width=\"100%\">{0}</td></tr>", order.Header.ContactEmail);
            ret += string.Format("<tr><td nowrap>Имя:</td><td width=\"100%\">{0}</td></tr>", order.Header.ContactName);
            ret += string.Format("<tr><td nowrap>Телефон:</td><td width=\"100%\">{0}</td></tr>", order.Header.ContactPhone);
            ret += string.Format("<tr><td nowrap>Дата составления:</td><td width=\"100%\">{0}</td></tr>", order.Header.CreatedDate);
            ret += string.Format("<tr><td nowrap>Описание:</td><td width=\"100%\">{0}</td></tr>", order.Header.Description);
            //ret += string.Format("<tr><td nowrap>Общая сумма (с НДС):</td><td width=\"100%\">{0:F2}р.</td></tr>", order.Header.ItogoSumm);
            ret += "</table>";


            ret += "&nbsp;<br><div id=\"tablespec\">";
            ret += "<table width=\"98%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">";
            ret += "    <tr>";
            ret += "        <th>№</th>";
            if (toMegaOffice) // ДОбавляются колонки о поставщике товаров, для менеджера фирмы Мегаофис
            {
                ret += "        <th>Артикул у поставщика</th>";
                ret += "        <th>Наим. у поставщика</th>";
            }
            ret += "        <th>Артикул</th>";
            ret += "        <th width=\"100%\">Наименование</th>";
            ret += "        <th nowrap>Цена (с НДС)</th>";
            ret += "        <th nowrap>Кол-во</th>";
            ret += "        <th nowrap>Сумма (с НДС)</th>";
            ret += "    </tr>";

            int rowNum = 1;
            foreach (var rowOrder in order.Specification)
            {
                //OrdersServiceReference.Product prod = rowOrder.Product;
                ret += "<tr>";
                ret += string.Format("<td>{0}</td>", rowNum);
                if (toMegaOffice) // ДОбавляются колонки о поставщике товаров, для менеджера фирмы Мегаофис
                {
                    ret += string.Format("<td>{0}</td>", rowOrder.Specification.SupplierArtikul);
                    ret += string.Format("<td>{0}</td>", rowOrder.Specification.SupplierName);
                }
                ret += string.Format("<td>{0}</td>", rowOrder.Specification.Artikul);
                ret += string.Format("<td>{0}</td>", rowOrder.Specification.ProductName);
                ret += string.Format("<td>{0}р.</td>", ((rowOrder.Specification.Price != null) ? (double)rowOrder.Specification.Price : 0));
                ret += string.Format("<td>{0}</td>", rowOrder.Specification.Count);
                ret += string.Format("<td>{0}р.</td>", rowOrder.Specification.Summa);
                ret += "</tr>";
                rowNum++;
            }

            ret += "<tr><td colspan=\"" + colCount.ToString() + "\" align=\"right\">ИТОГО: </td><td>" + order.Header.ItogoSumm + "р.</td></tr>";

            ret += "</table>";
            ret += "</div>";

            return ret;
        }

        public static string GetConsolidatedHTML(ConsolidatedAccountEntity consolid)
        {
            string ret = "";
            ret += "<style>";
            ret += "#tablespec table { background-color: black; }";
            ret += "#tablespec th { background-color: white; }";
            ret += "#tablespec td { background-color: white; }";
            ret += "</style>";

            ret += "<p>Консолидированный счет № " + consolid.ConsolidatedAccount.Number.ToString();
            ret += " от " + consolid.ConsolidatedAccount.CreatedDate.ToString() + "</p>";

            ret += "<p>Дата начала: " + consolid.ConsolidatedAccount.PeriodDateStart.ToShortDateString() + "</p>";
            ret += "<p>Дата окончания: " + consolid.ConsolidatedAccount.PeriodDateEnd.ToShortDateString() + "</p>";

            ret += "&nbsp;<br><div id=\"tablespec\">";
            ret += "<table width=\"98%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">";
            ret += "    <tr>";
            ret += "        <th>№</th>";
            ret += "        <th nowrap>ID товара</th>";
            ret += "        <th>Артикул</th>";
            ret += "        <th width=\"100%\">Наименование</th>";
            ret += "        <th nowrap>Цена (с НДС)</th>";
            ret += "        <th nowrap>Кол-во</th>";
            ret += "        <th nowrap>Сумма (с НДС)</th>";
            ret += "    </tr>";

            int rowNum = 1;
            foreach (var cons in consolid.Specification)
            {
                //ExpendBillServiceReference.Product prod = cons.Product;
                ret += "<tr>";
                ret += string.Format("<td>{0}</td>", rowNum);
                ret += string.Format("<td>{0}</td>", cons.ProductId);
                ret += string.Format("<td>{0}</td>", cons.Artikul);
                ret += string.Format("<td>{0}</td>", cons.ProductName);
                ret += string.Format("<td>{0}р.</td>", ((cons.Price != null) ? (double)cons.Price : 0));
                ret += string.Format("<td>{0}</td>", cons.Count);
                ret += string.Format("<td>{0}р.</td>", cons.Summa);
                ret += "</tr>";
                rowNum++;
            }

            ret += "</table>";
            ret += "</div>";
            return ret;
        }




        public static string GetConsolidatedHTML2(CAEntity2 consolid)
        {
            string ret = "";
            ret += "<style>";
            ret += "#tablespec table { background-color: black; }";
            ret += "#tablespec th { background-color: white; }";
            ret += "#tablespec td { background-color: white; }";
            ret += "</style>";

            ret += "<p>Консолидированный счет № " + consolid.Number.ToString();
            ret += " от " + consolid.CreatedDate.ToString() + "</p>";

            ret += "<p>Дата начала: " + consolid.PeriodDateStart.ToShortDateString() + "</p>";
            ret += "<p>Дата окончания: " + consolid.PeriodDateEnd.ToShortDateString() + "</p>";

            ret += "&nbsp;<br><div id=\"tablespec\">";
            ret += "<table width=\"98%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">";
            ret += "    <tr>";
            ret += "        <th>№</th>";
            ret += "        <th nowrap>ID товара</th>";
            ret += "        <th>Артикул</th>";
            ret += "        <th width=\"100%\">Наименование</th>";
            ret += "        <th nowrap>Цена (с НДС)</th>";
            ret += "        <th nowrap>Кол-во</th>";
            ret += "        <th nowrap>Сумма (с НДС)</th>";
            ret += "    </tr>";

            int rowNum = 1;
            foreach (var cons in consolid.Specification)
            {
                //ExpendBillServiceReference.Product prod = cons.Product;
                ret += "<tr>";
                ret += string.Format("<td>{0}</td>", rowNum);
                ret += string.Format("<td>{0}</td>", cons.ProductId);
                ret += string.Format("<td>{0}</td>", cons.Artikul);
                ret += string.Format("<td>{0}</td>", cons.ProductName);
                ret += string.Format("<td>{0}р.</td>", ((cons.Price != null) ? (double)cons.Price : 0));
                ret += string.Format("<td>{0}</td>", cons.Count);
                ret += string.Format("<td>{0}р.</td>", cons.Summa);
                ret += "</tr>";
                rowNum++;
            }

            ret += "</table>";
            ret += "</div>";
            return ret;
        }


        public static string GetExpedBillHTML_toEMail(ExpendBillEntity expbill, bool toMegaOffice = false)
        {
            int colCount = (toMegaOffice) ? 7 : 5;

            string ret = "";
            ret += "<style>";
            ret += "#tablespec table { background-color: black; }";
            ret += "#tablespec th { background-color: white; }";
            ret += "#tablespec td { background-color: white; }";
            ret += "</style>";
            ret += "<table border=\"0\" cellpadding=\"4\">";
            ret += string.Format("<tr><td nowrap width=\"100%\" colspasn=\"2\">Расходная накладная <b>№ {0}</b> от <b>{1}</b> к заказу <b>№ {2}</b> от <b>{3}</b></td></tr>", 
                                    expbill.ExpendBill.NumberTotal, expbill.ExpendBill.ExpendBillDate.Value.ToLongDateString(),
                                    expbill.Order.Header.Number, expbill.Order.Header.CreatedDate.ToLongDateString());
            ret += "</table>";
            ret += "<table border=\"0\" cellpadding=\"4\">";
            ret += string.Format("<tr><td nowrap>E-mail:</td><td width=\"100%\">{0}</tr>", expbill.Order.Header.ContactEmail);
            ret += string.Format("<tr><td nowrap>Имя:</td><td width=\"100%\">{0}</tr>", expbill.Order.Header.ContactName);
            ret += string.Format("<tr><td nowrap>Телефон:</td><td width=\"100%\">{0}</tr>", expbill.Order.Header.ContactPhone);
            ret += string.Format("<tr><td nowrap>Описание:</td><td width=\"100%\">{0}</tr>", expbill.Order.Header.Description);
            //ret += string.Format("<tr><td nowrap>Общая сумма (с НДС):</td><td width=\"100%\">{0:F2}р.</tr>", order.Header.ItogoSumm);
            ret += "</table>";


            ret += "&nbsp;<br><div id=\"tablespec\">";
            ret += "<table width=\"98%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\">";
            ret += "    <tr>";
            ret += "        <th>№</th>";
            if (toMegaOffice) // ДОбавляются колонки о поставщике товаров, для менеджера фирмы Мегаофис
            {
                ret += "        <th>Артикул у поставщика</th>";
                ret += "        <th>Наим. у поставщика</th>";
            }
            ret += "        <th>Артикул</th>";
            ret += "        <th width=\"100%\">Наименование</th>";
            ret += "        <th nowrap>Цена (с НДС)</th>";
            ret += "        <th nowrap>Кол-во</th>";
            ret += "        <th nowrap>Сумма (с НДС)</th>";
            ret += "    </tr>";

            int rowNum = 1;
            foreach (var exp in expbill.Specification)
            {
                //OrdersServiceReference.Product prod = rowOrder.Product;
                ret += "<tr>";
                ret += string.Format("<td>{0}</td>", rowNum);
                if (toMegaOffice) // ДОбавляются колонки о поставщике товаров, для менеджера фирмы Мегаофис
                {
                    ret += string.Format("<td>{0}</td>", exp.SupplierArtikul);
                    ret += string.Format("<td>{0}</td>", exp.SupplierName);
                }
                ret += string.Format("<td>{0}</td>", exp.Artikul);
                ret += string.Format("<td>{0}</td>", exp.ProductName);
                ret += string.Format("<td>{0}р.</td>", ((exp.Price != null) ? (double)exp.Price : 0));
                ret += string.Format("<td>{0}</td>", exp.Count);
                ret += string.Format("<td>{0}р.</td>", exp.Summa);
                ret += "</tr>";
                rowNum++;
            }

            ret += "<tr><td colspan=\"" + colCount.ToString() + "\" align=\"right\">ИТОГО: </td><td>" + string.Format("{0:0.00}", expbill.ExpendBill.ItogoSumm) + "р.</td></tr>";

            ret += "</table>";
            ret += "</div>";

            return ret;
        }


        public static string GetExpedBillHTML(ExpendBillEntity expbill)
        {
            string ret = "";
            ret += "<style>";
            ret += "body { font-size: 12px; }";
            ret += "* { font-family: arial; }";
            ret += "#tablespec table { background-color: black; }";
            ret += "#tablespec th { background-color: white;border:1px solid black;border-top:2px solid black;text-align:center;white-space:nowrap;padding:10px 10px 10px 10px; }";
            ret += "#tablespec td { background-color: white;border:1px solid black;vertical-align:top; }";
            ret += "#tablespec table { background-color: white; }";
            ret += "#tablespec td.td1{ border:0px;border-top:1px solid black;text-align:right;font-size:18px;font-weight:bold; }";
            ret += "#tablespec td.td2{ border:0px;text-align:right;font-size:18px;font-weight:bold; }";
            ret += "</style>";

            ret += "<p style=\"font-size:20px;border-bottom:2px solid black;\"><b>Расходная накладная № " + expbill.ExpendBill.NumberTotal;
            ret += " от " + expbill.ExpendBill.ExpendBillDate.Value.ToLongDateString() + "</b></p>";
            //ret += "<p>Статус: " + expbill.State.Name + "</p>";
            //if (expbill.ExpendBill.ExpendBillDate!=null) ret += "<p>Дата накладной: " + expbill.ExpendBill.ExpendBillDate.ToString() + "</p>";
            ret += string.Format("<p style=\"font-size:16px;\"><b>к Заказу № {0} от {1}</b></p>", expbill.Order.Header.Number, expbill.Order.Header.CreatedDate.ToLongDateString());

            ret += "<table width=\"100%\" border:\"0\">";
            ret += "<tr><td style=\"vertical-align:top;\">Поставщик: </td><td width=\"100%\">";

            ret += "<b>ООО \"Мегаофис\". Телефон: +7(495) 665-67-04</b>";
            //"ООО \"Мега\". Телефон: +7(495) 665-67-04, почта: statusvip@inbox.ru, время работы с 10 до 18 часов."

            //ret += "ИНН: <b>5031071868</b> КПП: <b>771901001</b> Р/С: <b>40702810400780000030</b> в ОАО \"УРАЛСИБ\" г. Москва<br>";
            //ret += "БИК: <b>044525787</b> к/с: <b>30101810100000000787</b> ОКПО: <b>99124724</b> ОГРН: <b>1075031000956</b> ";
            //ret += "<br>Юридич/Фактич. адрес: <b>105523, г. Москва, Щелковское шоссе, дом 100, корп. 108 офис 139</b> ";
            //ret += "<br>Тел/факс: <b>(495) 665-67-04</b> ";
            //ret += "<br>Ген. <b>Директор: Козак Игорь Богданович (по Уставу)</b>";
                
            ret += "</td></tr>";
            ret += "<tr><td style=\"vertical-align:top;\">Покупатель: </td><td><b>";
            ret += expbill.OrderFullInfo.CreatedJuridicalPersonName;
            ret += (!string.IsNullOrEmpty(expbill.Order.Header.ContactPhone) ? ", " + expbill.Order.Header.ContactPhone : "");
            ret += (!string.IsNullOrEmpty(expbill.Order.Header.ContactEmail) ? ", " + expbill.Order.Header.ContactEmail : "");
            ret += (!string.IsNullOrEmpty(expbill.Order.Header.ContactName) ? ", " + expbill.Order.Header.ContactName : "");
            ret += (!string.IsNullOrEmpty(expbill.Order.Header.Description) ? ". " + expbill.Order.Header.Description : "");
            ret += "<br>";
            ret += expbill.OrderFullInfo.CreatedCompanyAddress;
            ret += "</b></td></tr>";
            ret += "</table><br>";

            ret += "<div id=\"tablespec\">";
            ret += "<table width=\"98%\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\">";
            ret += "    <tr>";
            ret += "        <th style=\"border-left:2px solid black;\">№</th>";
            ret += "        <th>ID товара</th>";
            ret += "        <th width=\"100%\">Товар</th>";
            ret += "        <th nowrap colspan=\"2\">Количество</th>";
            ret += "        <th nowrap>Цена (с НДС)</th>";
            ret += "        <th nowrap style=\"border-right:2px solid black;\" >Сумма (с НДС)</th>";
            ret += "    </tr>";

            double summa = 0;
            int rowNum = 1;
            foreach (var exp in expbill.Specification)
            {
                //ExpendBillServiceReference.Product prod = exp.Product;
                double price = ((exp.Price != null) ? (double)exp.Price : 0);
                ret += "<tr>";
                ret += string.Format("<td style=\"border-left:2px solid black;\">{0}</td>", rowNum);
                ret += string.Format("<td>{0}</td>", exp.ProductId);
                ret += string.Format("<td>{0}</td>", exp.ProductName);
                ret += string.Format("<td>{0}</td>", exp.Count);
                ret += "<td>шт.</td>";
                ret += string.Format("<td style=\"text-align:right;\">{0:0.00}</td>", price);
                double sum = price * exp.Count;
                summa += sum;
                ret += string.Format("<td style=\"border-right:2px solid black;text-align:right;\">{0:0.00}</td>", sum);
                ret += "</tr>";
                rowNum++;
            }

            double nds = summa*(1-(1/1.18));
            ret += "<tr><td colspan=\"5\" class=\"td1\"><b>Итого:</b> </td><td class=\"td1\">" + string.Format("{0:0.00}", summa) + "</td><td class=\"td1\"></td></tr>";
            ret += "<tr><td colspan=\"5\" class=\"td2\"><b>В том числе НДС:</b> </td><td class=\"td2\">" + string.Format("{0:0.00}", nds) + "</td></tr>";

            ret += "</table>";
            ret += "<p>Всего наименований " + (rowNum-1).ToString() + ", на сумму " + summa.ToString() + " RUB<br>";
            ret += "<b>" + SummToStringHelper.RurPhrase(Convert.ToDecimal(summa)) + "</b>";
            ret += "</p></div>";

            ret += "<div style=\"border-top:2px solid black;padding: 25px 15px 25px 15px;\">";
            //ret += "Отпустил _____________________________     Получил _____________________________";
            ret += "Отпустил _____________________________     Получил _____________________ / ________________ /";
            ret += "</div>";

            return ret;
        }
    }
}